#include "Compilador.h"

Compilador::Compilador()
{

}

Compilador::~Compilador()
{

}	

bool Compilador::executarLexico(char *rFile)
{
	this->mLexico.setFile(rFile);
	return this->mLexico.analisar();
}

bool Compilador::executarSintatico()
{
    this->mSintatico.setListaTokens(mLexico.getTokens());
    
    bool sucesso = this->mSintatico.analiza(&this->mArvore, &this->mTabelaSimbolos); 

    if (sucesso == true)
    {
        std::ofstream saida("Hash.txt");
        mTabelaSimbolos.exibir(saida);
        saida.close();
    }
    
    return sucesso;
}

bool Compilador::executarSemantico(NoArvore *pNoErro)
{
    return this->mSemantico.analisar(&this->mArvore, &this->mTabelaSimbolos, pNoErro);
}

void Compilador::exibirLexico()
{
    std::ofstream saida("Tokens.txt");
	this->mLexico.exibirTokens(saida);
	saida.close();
}

void Compilador::exibirArvoreSemantica()
{
    std::ofstream saida("ArvoreSemantica.txt");
    this->mArvore.exibirArvore(saida);
    saida.close();
}

void Compilador::gerarCodigo()
{
    std::ofstream saida("CodigoMEPA.txt");
    
    mGerador.geraCodigo(&this->mArvore, &this->mTabelaSimbolos);
    mGerador.imprime(saida);
}
